A node communicating with another node via a communication medium may use a single transmit, or port, queue for buffering frames of data to be transmitted from an output port (for example, an input/output port or outlet) of the node to the other node. Alternatively, a node may use multiple transmit queues for buffering the frames of data, wherein each frame of data is selected to be stored in one of the transmit queues based on some criteria such as type, class or quality of service associated with the frame, or data in the frame.
In any case, if frames of data are received at the node faster than the frames can be transmitted to the other node, the transmit queue or queues begin to fill up with frames. Generally, recently received frames wait in the queue while frames received ahead of them in the queue are first transmitted, resulting in what is known as “head of line” blocking, since frames at the head of the transmit queue block other frames in the queue from being transmitted. The period of time a frame remains in the queue increases the overall period of time it takes for the frame to be transmitted between the nodes. This increase in time taken to transmit a frame from one node to another node in a network setting generally is referred to as network latency.
If a transmit queue in a node fills up and cannot accept any further frames, any additional frames received at the node may be discarded. Applications executing on the respective nodes may be communicating with each other and may time out, or hang waiting for data to arrive from the other node, or detect the loss or absence of data that was discarded and request the data be retransmitted. Latency and retransmission negatively affect throughput and bandwidth of the communication medium over which the nodes communicate.
The approaches discussed above generally do not provide enough transmit queues for non-blocking throughput in a node or a network. One approach is to provide separate transmit queues for each traffic flow transmitted by a node. A traffic flow may be defined as related frames of data transmitted between two nodes during a session between instances of respective applications executing on the nodes. Given there may be multiple instances of multiple applications executing on each node, and multiple sessions between these instances, the number of transmit queues needed for this approach is not easily determined, if not unbounded.
A simple form of controlling flow of frames (“flow control”) between nodes occurs when one or more transmit queues in a node fills with frames to the point the node discards frames that would otherwise be transmitted to another node. Essentially, this type of flow control is binary in manner—either a frame is transmitted or it is not. Another form of flow control involves a node (“the receiving, or destination, node”) that is, or is becoming, congested sending a message, for example, a pause frame, to another node (“the transmitting, or source, node”) from which it is receiving frames. The message instructs the transmitting node to stop transmitting frames to the receiving node for a selected short period of time, or until another message is sent from the receiving node to the transmitting node instructing the transmitting node to begin transmitting frames again.
The latter type of flow control is used, for example, between nodes in Ethernet networks adhering to the Institute for Electrical and Electronic Engineers (IEEE) 802.3 standard for the CSMA/CD (Carrier Sense Multiple Access/Collision Detection) protocol, including Ethernet, operating in full-duplex mode over Fast Ethernet (100 Mbps), Gigabit Ethernet (1000 Mbps), and the IEEE 802.3ae standard (10 Gigabit Ethernet). See IEEE 802.3-2002: IEEE Standard for Information technology—Telecommunications and information exchange between systems—Local and metropolitan area networks—Specific requirements—Part 3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications, and IEEE 802.3ae-2002: IEEE Standard for Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications-Media Access Control (MAC) Parameters, Physical Layer and Management Parameters for 10 Gb/s Operation for further information on use of flow control in Ethernet networks.
These flow control techniques do not take into consideration different destinations to which the receiving node forwards frames, once received, nor distinguish between different priorities or classes of service associated with frames. Moreover, if a congested node uses flow control, a node that transmits frames to the congested node may, in turn, become congested and use flow control. In this way, congestion can cascade back through a network of nodes (referred to as congestion spreading).